//
//  AppDelegate.swift
//  MyWeiBlog
//
//  Created by laichunhui on 15/9/28.
//  Copyright © 2015年 lch. All rights reserved.
//

import UIKit
import SwiftyJSON

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        
        /// 友盟分享
        UMSocialData.setAppKey("5608de9de0f55afaae0018e6")
        
        //添加微博SSO授权开关
        UMSocialSinaHandler.openSSOWithRedirectURL("http://sns.whalecloud.com/sina2/callback")
        
        // 注册通知 object - 监听由哪一个对象发出的通知，如果设置成 nil，监听所有对象发出的 `name` 通知
        NSNotificationCenter.defaultCenter().addObserver(self, selector: "switchRootViewController:", name: SwitchRootViewControllerNotification, object: nil)
        
        // 设置网络
       // setupNetwork()
        // 设置外观
        setupAppearance()
        
        window = UIWindow(frame: UIScreen.mainScreen().bounds)
        
        // 测试加载制定 id 的 控制器
        //        let sb = UIStoryboard(name: "Demo", bundle: nil)
        //        let vc = sb.instantiateViewControllerWithIdentifier("demoVC")

        
        /* launchScreen */
        loadStartImage(LAUNCH_IMAGE_URL, onSuccess: {(name,image) in
            //回调闭包
            //修改窗体的根视图的Controller为启动Image的Controller.
            //这里自定义了一个启动的ViewController, 他指定了消失后切换的视图的Controller.还有动画效果,以及显示的图片.
            self.window?.rootViewController = LaunchImageViewController.addTransitionToViewController(self.defaultRootViewController(), modalTransitionStyle: UIModalTransitionStyle.CrossDissolve, withImageDate: image, withSourceName: name)
            //UIModalTransitionStyle转场动画效果   CrossDissolve渐变  PartialCurl翻页  FlipHorizontal上下翻转  CoverVertical上下平移(默认值)
        })
        
        window?.makeKeyAndVisible()
            
        return true
    }
    
    //从网络上加载开始图片
    func loadStartImage(url:String,onSuccess:(String, UIImage)->Void){
        
//        let name = "myweiblog"
//        
//        let image = UIImage(named: "LaunchImage")
//        onSuccess(name, image)
        //同步调用URL,获取开始图片的JSON结果
        var data: NSData?
       
        do {
            data = try NSURLSession.sharedSession().sendSynchronousDataTaskWithURL(NSURL(string: url)!)
        } catch _ {
            data = nil
        }
        
        if let temp = data {
            //把结果NSData 转换成JSON
            let json = JSON(data:temp)
            //获取结果中得img,也就是真正的图片的URL
            let imageUrl = json["img"].string
            //获取版权人
            let name = json["text"].string
            
            if  let iu = imageUrl {
                
                    //这个是同步加载的,所以界面不会有闪烁
                    //获取图片的NSData
                    do{
                        data = try NSURLSession.sharedSession().sendSynchronousDataTaskWithURL(NSURL(string: iu)!)
                    }catch let e {
                        //TODO 报错
                        print(e)
                    }
                    
                    //把NSData转换成必要的UIImage对象
                    if let d  = data, let image = UIImage(data: d) {

                        //调用成功的回调
                        onSuccess(name!,image)
                    }
            }
        }
    }

    deinit {
        // 注销指定名称的通知，在程序被销毁的时候，才会被调用，可以省略！
        NSNotificationCenter.defaultCenter().removeObserver(self, name: SwitchRootViewControllerNotification, object: nil)
    }
    
    /// 切换控制器的通知监听方法
    func switchRootViewController(notification: NSNotification) {
        // 提示：在发布通知的时候
        // 如果只是传递消息，post name
        // 如果传递消息的同时，希望传递一个数值，可以通过 `object` 来传递值
        // 如果传递消息的同时，希望传递更多的内容，可以通过 userInfo 字典来传递
        let Vc = notification.object as! UIViewController
        window?.rootViewController = (notification.object == nil) ? TabBarControlle() : Vc
    }
    
    /// 启动的默认根控制器
    private func defaultRootViewController() -> UIViewController {
        
        // 1. 判断用户是否登录
        if UserAccountViewModel.shareUserAccountViewModel.userLogon {
            // 2. 如果登录，判断是否有新版本
          //  return isNewVersion() ? NewFeatureViewController() : WelcomeViewController()
            return TabBarControlle()
        }
        
        // 3. 如果没有登录，返回 Main
        return LoginViewController()
    }
//
//    /// 检查是否是新版本
//    private func isNewVersion() -> Bool {
//        
//        // 1. 当前应用程序的版本号
//        let bundleVersion = Double(NSBundle.mainBundle().infoDictionary!["CFBundleShortVersionString"] as! String)!
//        printLog("当前版本 \(bundleVersion)")
//        
//        // 2. 之前保存的程序版本号
//        let versionKey = "com.itheima.weibo.version"
//        // 如果没有，返回0
//        let saxboxVersion = NSUserDefaults.standardUserDefaults().doubleForKey(versionKey)
//        printLog("之前保存的版本 \(saxboxVersion)")
//        
//        // 3. 保存当前版本
//        NSUserDefaults.standardUserDefaults().setDouble(bundleVersion, forKey: versionKey)
//        
//        // 4. 比较两个版本，返回结果
//        return bundleVersion > saxboxVersion
//    }
    
    /// 设置网络指示器
//    private func setupNetwork() {
//        // 设置网络指示器，一旦设置，发起网络请求，会在状态栏显示菊花，指示器只负责 AFN 的网络请求，其他网络框架不负责
//        AFNetworkActivityIndicatorManager.sharedManager().enabled = true
//        
//        // 设置缓存大小 NSURLCache －> GET 请求的数据会被缓存
//        // 缓存的磁盘路径: /Library/Caches/(application bundle id)
//        // MATTT，内存缓存是 4M，磁盘缓存是 20M
//        // 提示：URLSession 只有 dataTask 会被缓存，downloadTask / uploadTask 都不会缓存
//        let cache = NSURLCache(memoryCapacity: 4 * 1024 * 1024, diskCapacity: 20 * 1024 * 1024, diskPath: nil)
//        NSURLCache.setSharedURLCache(cache)
//    }
    
    
    //MARK: - 设置全局外观
    private func setupAppearance() {
        /* statusBar */
        UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent
        
        /* navigationBar */
        let navBar = UINavigationBar.appearance()
        navBar.setBackgroundImage(UIImage(named: "common_navbar_bg_88"), forBarMetrics: UIBarMetrics.Default)
        //            var titleAttri = Dictionary({NSForegroundColorAttributeName: ,})
        navBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.whiteColor(),
            NSFontAttributeName:UIFont.systemFontOfSize(18)]
        
        let navBarItem = UIBarButtonItem.appearance()
        navBarItem.tintColor = UIColor.whiteColor()
        
        /* tabBar */
        UITabBar.appearance().tintColor = UIColor.redColor()
       // UITabBar.appearance().barTintColor = UIColor.clearColor()
        
        /*tabBarItem*/
        let item = UITabBarItem.appearance()
        //普通状态字体
        item.setTitleTextAttributes([NSFontAttributeName: UIFont.systemFontOfSize(12), NSForegroundColorAttributeName:UIColor.clearColor()], forState: .Normal)
        //选中状态字体
        item.setTitleTextAttributes([NSFontAttributeName: UIFont.systemFontOfSize(12), NSForegroundColorAttributeName: UIColor.colorWith(239, green: 45, blue: 41, alpha: 1)], forState: UIControlState.Selected)
    }
    
    
    func applicationDidEnterBackground(application: UIApplication) {
       // StatusDAL.clearCacheStatus()
    }
    
    //微博SSO集成：添加系统回调
    func application(application: UIApplication, handleOpenURL url: NSURL) -> Bool {
        return UMSocialSnsService.handleOpenURL(url)
    }
    func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool {
        return UMSocialSnsService.handleOpenURL(url)
    }
}

